home *** CD-ROM | disk | FTP | other *** search
/ The X-Philes (2nd Revision) / The X-Philes Number 1 (1995).iso / xphiles / coding / dsp / c30ug.exe / $LMS.ASM < prev    next >
Encoding:
Assembly Source File  |  1988-03-26  |  2.8 KB  |  92 lines

  1. ;**************************************************************
  2. ;  
  3. ;                 $lms.asm
  4. ;  
  5. ;                 staff
  6. ;  
  7. ;                 03-26-88
  8. ;  
  9. ;           (C) Texas Instruments Inc., 1992 
  10. ;  
  11. ;           Refer to the file 'license.txt' included with this 
  12. ;           this package for usage and license information. 
  13. ;  
  14. ;**************************************************************
  15. Example 33.  Adaptive FIR filter (LMS algorithm)
  16. ;
  17. ;==============================================================================
  18. ;                             SUBROUTINE L M S
  19. ;==============================================================================
  20. ; LMS == LMS ADAPTIVE FILTER
  21. ;
  22. ;
  23. ;
  24. ; EQUATIONS: y(n) = h(n,0)*x(n) + h(n,1)*x(n-1) + ... + h(n,N-1)*x(n-(N-1))
  25. ;            for (i = 0; i < N; i++)
  26. ;                h(n+1,i) = h(n,i) + tmuerr * x(n-i)
  27. ;
  28. ; TYPICAL CALLING SEQUENCE:
  29. ;
  30. ;       load    R4
  31. ;       load    AR0
  32. ;       load    AR1
  33. ;       load    RC
  34. ;       load    BK
  35. ;       CALL    FIR
  36. ;
  37. ;
  38. ; ARGUMENT ASSIGNMENTS:
  39. ;   argument | function
  40. ;   ---------+-----------------------
  41. ;   R4       | scale factor (2 * mu * err)
  42. ;   AR0      | address of h(n,N-1)
  43. ;   AR1      | address of x(n-(N-1))
  44. ;   RC       | length of filter - 2 (N-2)
  45. ;   BK       | length of filter  (N)
  46. ;
  47. ; REGISTERS USED AS INPUT: R4, AR0, AR1, RC, BK
  48. ; REGISTERS MODIFIED: R0, R1, R2, AR0, AR1, RC
  49. ; REGISTER CONTAINING RESULT: R0
  50. ;
  51. ; PROGRAM SIZE: 10 words
  52. ;
  53. ; EXECUTION CYCLES: 12 + 3(N-1)
  54. ;
  55. ;==============================================================================
  56. ;
  57. ; setup (i = 0)
  58. ;
  59.     .global    LMS
  60. ;                                       ; initialize R0:
  61. LMS     MPYF3   *AR0, *AR1, R0          ; h(n,N-1) * x(n-(N-1)) -> R0
  62.         LDF     0.0,R2                  ; initialize R2.
  63. ;
  64. ;                                       ; initialize R1:
  65.         MPYF3   *AR1++(1)%,R4,R1        ; x(n-(N-1)) * tmuerr -> R1
  66.         ADDF3   *AR0++(1),R1,R1         ; h(n,N-1) + x(n-(N-1)) * tmuerr -> R1
  67. ;
  68. ; filter and update ( 1 <= i < N)
  69. ;
  70.         RPTB    LOOP                    ; setup the repeat block.
  71. ;
  72. ;                                       ; filter:
  73.         MPYF3   *AR0--(1),*AR1,R0       ; h(n,N-1-i) * x(n-(N-1-i)) -> R0
  74. ||      ADDF3   R0,R2,R2                ; multiply and add operation.
  75. ;
  76. ;                                       ; update:
  77.         MPYF3   *AR1++(1)%,R4,R1        ; x(n-(N-1-i)) * tmuerr -> R1
  78. ||      STF     R1, *AR0++(1)           ; R1 -> h(n+1,N-1-(i-1))
  79. ;
  80. LOOP    ADDF3   *AR0++(1),R1,R1     ; h(n,N-1-i) + x(n-(N-1-i))*tmuerr -> R1
  81. ;
  82.         ADDF3   R0,R2,R0            ; add last product.
  83.         STF     R1,*-AR0(1)         ; h(n,0) + x(n) * tmuerr -> h(n+1,0)
  84. ;
  85. ; return sequence
  86. ;
  87.         RETS                    ; return
  88. ;
  89. ; end
  90. ;
  91.     .end
  92.